Skip to main content

GUI 어플리케이션의 단위 테스트를 위한 테스트 자동화 플랫폼의 설계

· 4 min read
박환석
류호동
이우진
담당교수

논문 정보

  • 제목: Design of test automation platform for unit testing on GUI application
  • 저자: 박환석, 류호동, 이우진 (경북대학교 전자전기컴퓨터학부)
  • 학회/저널: 제37회 한국정보처리학회 춘계학술대회 논문집 제19권 1호
  • 발행일: 2012-04
  • 주요 연구 내용: 기존 Record-Playback 기법과 Sikuli의 단점을 보완하기 위해, 사용자의 입력 이벤트를 기록하고 예상 이미지를 통해 결과를 자동 검증하며 다수의 시나리오를 관리할 수 있는 GUnit 플랫폼을 설계함.
  • 주요 결과 및 결론: 시나리오 편집기(테스트 케이스 생성 및 관계 정의)와 테스트 수행 및 검증기(자동 실행 및 이미지 비교)로 구성된 아키텍처를 제시하여 점진적이고 효율적인 GUI 테스팅 환경을 구축함.
  • 기여점: 결과 검증이 어려운 기존 자동화 도구의 문제와 다수 시나리오 관리의 어려움을 해결하는 통합된 GUI 단위 테스트 구조를 제안함.

요약

초록

최근 IT 기기의 GUI 환경은 사용자 편의성을 높였으나 개발자에게는 테스팅의 어려움을 가져왔다. 기존의 Record-Playback 기법이나 Sikuli 같은 도구는 기능 변경에 따른 유연성이 부족하거나 시나리오 관리가 어렵다는 한계가 있다. 본 논문에서는 GUI 애플리케이션의 점진적 테스팅을 위해, 테스트 케이스를 생성하고 연결하는 '시나리오 편집기'와 이를 실행하고 결과를 이미지 기반으로 검증하는 '수행 및 검증기'로 구성된 자동화 테스트 도구(GUnit)를 설계한다.

서론

GUI 프로그램은 특정 위치의 키보드/마우스 입력에 대해 아이콘, 다이얼로그, 메시지 박스 등의 시각적 요소로 결과를 출력한다. 이는 단순 반복적인 테스트를 요구하며 결과 검증이 까다롭다. 이를 해결하기 위해 입력 이벤트를 재현하는 Record-Playback 기법과 컴퓨터 비전을 이용한 Sikuli가 등장했으나, 전자는 결과 자동 검증이 불가능하고 후자는 다수의 시나리오를 체계적으로 관리하는 실행기(Runner)가 부재하다는 단점이 있다. 본 연구는 이러한 문제를 해결하기 위해 단위 테스트 관점에서 GUI를 테스팅하는 통합 도구를 제안한다.

배경

  • Record-Playback 기법: 구현이 쉬워 널리 사용되지만, UI 변경 시 이벤트를 재사용하기 어렵고(재입력 필요), 결과 검증 기능이 없어 사람이 직접 확인해야 한다.
  • Sikuli: 컴퓨터 비전을 이용해 GUI 요소를 식별하므로 위치 변화에 강인하고 결과 검증이 가능하다. 그러나 별도의 스크립트 명세가 필요하며, 동시에 다수의 요소를 캡처하여 영역을 지정하거나 체계적인 시나리오 관리를 수행하는 데 한계가 있다.
  • GUI 단위 테스트(GUnit): xUnit과 달리 GUI 단위 테스트는 버튼 클릭 등의 입력을 주고, 그 결과로 나타나는 아이콘이나 텍스트를 예상 결과와 비교하여 검증한다. 개발이 진행될수록 테스트 케이스 간의 관계(시나리오) 정의가 중요해진다. Figure 1

모델 아키텍처 / 방법론

본 논문에서 제안하는 GUnit의 구조는 크게 두 부분으로 나뉜다(논문의 그림 1 참조).

  1. 시나리오 편집기 (Scenario Editor)

    • 이벤트 기록기 (Event Recorder): 사용자의 마우스 및 키보드 입력을 기록한다.
    • 화면 캡처기 (Screen Capturer): 테스트 통과 여부를 판단할 예상 이미지를 캡처하고, 실제 수행 시 비교할 관심 영역(ROI)을 지정한다. 두 개 이상의 관심 영역에 대해 논리 연산(합연산, 곱연산 등) 적용이 가능하다.
    • 다이어그램 편집기 (Diagram Editor): 테스트 케이스(노드)들의 수행 순서와 관계를 정의하여 시나리오를 구성한다.
  2. 테스트 수행 및 검증기 (Test Runner and Verifier)

    • 시나리오 모델 파서 (Scenario Model Parser): 작성된 시나리오 모델을 분석한다.
    • 시나리오 매니저 (Scenario Manager): 정의된 순서대로 테스트를 수행하며 흐름을 제어한다.
    • 이미지 비교기 (Image Comparator): 테스트 수행 중 캡처된 실제 이미지와 미리 정의된 예상 이미지를 비교한다. 일치/불일치 여부에 따라 시나리오 진행 방향(다음 시나리오 수행 등)을 결정한다.
    • 로그 기록기 (Log Recorder): 수행 결과를 로그로 저장한다. Figure 2

실험 결과

본 논문은 플랫폼의 설계를 다루는 연구이므로 정량적인 성능 지표보다는 시스템의 동작 흐름과 구조적 설계를 주요 결과로 제시한다.

  • 시나리오 수행 흐름: 논문의 그림 2에서 도식화된 바와 같이, 각 노드(테스트 케이스)는 이벤트(e1,e2...e1, e2...)를 통해 다음 상태로 전이되며, 각 단계에서 결과(resultresult)를 검증한다. 검증 결과에 따라 분기하거나 다음 시나리오로 넘어가는 과정을 자동화했다.
  • 검증 자동화: 시각적 비교를 통해 결과 일치 여부를 판별하고, 불일치 시 시각적으로 구분하여 사용자에게 알리거나 다음 시나리오를 수행하도록 설계되었다.

결론

GUnit은 기존 단위 테스트 개념을 GUI 환경에 적용하여, 시나리오 편집기와 수행/검증기를 통해 점진적인 테스트가 가능하도록 설계되었다. 이를 통해 결과 검증이 가능한 GUI 테스트 케이스를 생성하고, 이를 재사용하여 효율적인 테스팅을 수행할 수 있다. 향후 과제로 시나리오 수행 알고리즘의 고도화와 정밀한 이미지 비교를 위한 컴퓨터 비전 연구가 요구된다.